--- /dev/null
+
+XEN_ROOT = ../..
+include $(XEN_ROOT)/tools/Rules.mk
+
+.PHONY: all
+all: build
+.PHONY: build
+build:
+ CC="$(CC)" CFLAGS="$(CFLAGS)" python setup.py build
+
+.PHONY: install
+ifndef XEN_PYTHON_NATIVE_INSTALL
+install: all
+ CC="$(CC)" CFLAGS="$(CFLAGS)" python setup.py install --home="$(DESTDIR)/usr" --prefix=""
+else
+install: all
+ CC="$(CC)" CFLAGS="$(CFLAGS)" python setup.py install --root="$(DESTDIR)"
+endif
+
+.PHONY: clean
+clean:
+ rm -rf build tmp *.pyc *.pyo *.o *.a *~ a.out
--- /dev/null
+/******************************************************************************
+ * ptsname.c
+ *
+ * A python extension to expose the POSIX ptsname() function.
+ *
+ * Copyright (C) 2007 XenSource Ltd
+ */
+
+#include <Python.h>
+#include <stdlib.h>
+
+/* Needed for Python versions earlier than 2.3. */
+#ifndef PyMODINIT_FUNC
+#define PyMODINIT_FUNC DL_EXPORT(void)
+#endif
+
+static PyObject *do_ptsname(PyObject *self, PyObject *args)
+{
+ int fd;
+ char *path;
+
+ if (!PyArg_ParseTuple(args, "i", &fd))
+ return NULL;
+
+ path = ptsname(fd);
+
+ if (!path)
+ {
+ PyErr_SetFromErrno(PyExc_IOError);
+ return NULL;
+ }
+
+ return PyString_FromString(path);
+}
+
+static PyMethodDef ptsname_methods[] = {
+ { "ptsname", do_ptsname, METH_VARARGS },
+ { NULL }
+};
+
+PyMODINIT_FUNC initptsname(void)
+{
+ Py_InitModule("ptsname", ptsname_methods);
+}
--- /dev/null
+from distutils.core import setup, Extension
+
+extra_compile_args = [ "-fno-strict-aliasing", "-Werror" ]
+
+setup(name = 'ptsname',
+ version = '1.0',
+ description = 'POSIX ptsname() function',
+ author = 'Tim Deegan',
+ author_email = 'Tim.Deegan@xensource.com',
+ license = 'GPL',
+ ext_modules = [ Extension("ptsname", [ "ptsname.c" ]) ])